iT邦幫忙

2025 iThome 鐵人賽

DAY 1
1
Rust

大家一起跟Rust當好朋友吧!系列 第 1

Day 1: 為何選擇 Rust?我的第一行 Rust 程式碼

  • 分享至 

  • xImage
  •  

嗨嗨!大家好!歡迎來到 Rust 三十天挑戰!!

作為一個平常主要寫 .NET 的後端工程師(或許你也是?),我對那些號稱「高效能」、「記憶體安全」的語言一直抱著既好奇又害怕的心情。好奇是因為總感覺那些底層技術很瞎趴很厲害,害怕則是因為雖然 C# 也有指標和 unsafe 程式碼,但我平常根本不碰,光想到要自己管記憶體就覺得頭很痛XD。

但最近在做一些高併發的 API 專案時,開始思考除了 .NET 之外是否有其他更適合的選擇。加上在朋友的介紹下認識了 Tauri 這個開源專案,一個用 Rust 打造的跨平台桌面應用框架,這更讓我對 Rust 產生了更濃厚的興趣。看到越來越多關於 Rust 的討論(特別是在 Web 後端和微服務領域),我想:既然都要學新東西了,不如就挑一個徹底不同的來挑戰自己吧!

這三十天的挑戰,除了想學會 Rust 本身,更重要的是我想記錄下這個「從Rust新手到能寫出一個簡單的Blog的程度」的過程。包括我踩到的坑、卡關的地方、以及那些突然開竅的瞬間。

如果你也和我一樣,對 Rust 完全陌生但很好奇,那就一起來吧!讓我們看看這個號稱「學會就回不去了」的語言,到底有什麼魅力!!!

為什麼是 Rust?(我做功課後的發現)

三大核心優勢

1. 效能 (Performance)

簡單來說,Rust 讓你可以寫出像 C# 一樣方便的程式碼,但跑起來的速度卻像 C/C++ 一樣快!聽起來很神奇對吧?這就是所謂的「零成本抽象」—你用了高階的語言特性,但編譯器會幫你優化成最高效的機器碼。實測下來,Rust 程式的執行效能真的可以和 C/C++ 媲美,有時候甚至還更快。

2. 記憶體安全 (Memory Safety)

傳統的系統程式語言如 C/C++ 雖然效能卓越,但記憶體管理一直是開發者的痛點。緩衝區溢位、懸置指標、記憶體洩漏等問題時常困擾著開發者。Rust 透過其獨創的所有權系統(之後會補充),在編譯時期就能防止這些問題,讓你專注於業務邏輯而非記憶體管理。

3. 併發安全 (Concurrency Safety)

在多核心處理器當道的今天,併發程式設計變得越來越重要。Rust 的型別系統能在編譯時期就防止資料競爭,實現「無懼併發」,讓開發者能安心地撰寫多執行緒程式。

與其他語言的比較

來看看 Rust 在各方面的表現:

vs. Python/JavaScript (高階語言)

  • 優勢:效能遠勝,記憶體安全,靜態型別
  • 劣勢:學習曲線較陡峭,開發速度較慢

vs. C/C++ (系統語言)

  • 優勢:記憶體安全,現代化語法,優秀的套件管理
  • 劣勢:編譯器較嚴格,某些底層操作需要 unsafe 區塊

vs. Go (現代系統語言)

  • 優勢:零成本抽象,無垃圾回收器,更精細的控制
  • 劣勢:學習曲線較陡峭,編譯時間較長

vs. C# (.NET) (企業級後端語言)

  • 優勢:無需虛擬機器和 GC 暫停,更精細的記憶體控制,更小的執行檔,更好的啟動速度
  • 劣勢:學習曲線較陡峭,生態系相對較新,沒有強大的 IDE 支援(如 Visual Studio)

Rust 適用的場景

Rust 特別適合以下應用場景:

  • 系統程式設計:作業系統、驅動程式、嵌入式系統
  • 網路服務:高效能 Web 服務器、API 服務
  • 區塊鏈與加密貨幣:需要高安全性和效能的金融應用
  • 遊戲引擎:需要極致效能的即時應用
  • WebAssembly:在瀏覽器中執行原生速度的應用

建立開發環境

說了這麼多理論,也該是時候動手實作了!讓我們一步步開始建立 Rust 開發環境。

1. 安裝 Rust

最推薦的方式是使用 rustup,這是 Rust 官方的工具鏈管理器:

Windows:
下載並執行 rustup-init.exe

macOS/Linux:

curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh

安裝完成後,重新啟動終端機並執行:

rustc --version
cargo --version

如果能看到版本資訊,恭喜你!你的 Rust 已經成功安裝啦!

2. 認識 Cargo

cargo 是 Rust 的建置工具和套件管理器,類似於 Node.js 的 npm 或 Python 的 pip。它能幫助我們:

  • 建立新專案
  • 管理相依套件
  • 編譯和執行程式
  • 執行測試
  • 產生文件

3. 我的第一個 Rust 程式

讓我們來嘗試建立自己第一個 Rust 專案:

cargo new hello_rust
cd hello_rust

這會建立一個新的目錄結構:

hello_rust/
├── Cargo.toml
└── src/
    └── main.rs

讓我們看看 src/main.rs 的內容:

fn main() {
    println!("Hello, world!");
}

沒錯,就是這麼簡單!現在執行它:

cargo run

你應該會看到:

   Compiling hello_rust v0.1.0 (/path/to/hello_rust)
    Finished dev [unoptimized + debuginfo] target(s) in 0.50s
     Running `target/debug/hello_rust`
Hello, world!

4. 讓程式更有趣一點

讓我們修改程式碼,加入一些互動元素:

use std::io;

fn main() {
    println!("歡迎來到 Rust 的世界!");
    println!("請輸入你的名字:");
    
    let mut name = String::new();
    
    io::stdin()
        .read_line(&mut name)
        .expect("讀取輸入失敗");
    
    println!("你好,{}!歡迎開始 Rust 之旅!", name.trim());
}

再次執行 cargo run,這次程式會要求你輸入名字,並給出個人化的歡迎訊息。

程式碼解析

即使是這個簡單的程式,也包含了一些重要的 Rust 概念:

  1. use std::io:匯入標準函式庫中的輸入/輸出模組
  2. let mut name:宣告一個可變的變數
  3. String::new():建立一個新的空字串
  4. expect():簡單的錯誤處理機制
  5. trim():移除字串前後的空白字元

以上今天就先告一段落囉!明天我們將繼續深入探討 Rust 的變數、資料型別與常數。你會發現 Rust 的型別系統比你想像的更有趣!我們將學習變數的可變性(mutability)、Rust 的基本資料型別、變數遮蔽(shadowing)的概念,以及常數與變數的差異等內容。
不過在結束今天之前,有個小題目大家可以玩看看~

小挑戰

修改今天的程式,讓它能夠:

詢問使用者的年齡
根據年齡給出不同的歡迎訊息(例如:18歲以下、18-65歲、65歲以上)

溫馨小提示:你可能需要用到字串轉數字的功能,可以搜尋 parse() 方法!!!

也謝謝大家陪伴我踏出 Rust 學習的第一步。如果你在環境設定上遇到任何問題,歡迎在留言區討論。讓我們一起在這三十天的旅程中,從頭學習 Rust !!!
我們明天見!


下一篇
Day 2: 變數、資料型別與常數:強型別的第一次接觸
系列文
大家一起跟Rust當好朋友吧!20
圖片
  熱門推薦
圖片
{{ item.channelVendor }} | {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言